---
title: 基础工作流 publish.yml
icon: Cuboid
---

## 参数 Inputs

### 应用版本

| 参数名称            | 类型   | 描述                               | 是否必需 | 默认值  |
| ------------------- | ------ | ---------------------------------- | -------- | ------- |
| app_version         | string | 应用版本                           | 否       | "0.0.0" |
| app_version_android | string | Android上的应用版本，不能是`0.0.0` | 是       |         |

### Release 信息

| 参数名称       | 类型    | 描述                     | 是否必需 | 默认值  |
| -------------- | ------- | ------------------------ | -------- | ------- |
| release_name   | string  | Release的名称            | 否       | Release |
| release_tag    | string  | Release的tag             | 是       |         |
| prerelease     | boolean | Release是否为prerelease  | 否       | false   |
| delete_release | boolean | 是否删除tag相同的Release | 否       | true    |

### turborepo

| 参数名称           | 类型   | 描述                                   | 是否必需 | 默认值                |
| ------------------ | ------ | -------------------------------------- | -------- | --------------------- |
| turbo_team         | string | turbo团队名称                          | 是       |                       |
| task_build         | string | 构建应用的**turborepo任务**名称        | 否       | "tauri:build"         |
| task_build_android | string | 构建Android应用的**turborepo任务**名称 | 否       | "tauri:build:android" |

### Android 签名

| 参数名称          | 类型   | 描述                                   | 是否必需 | 默认值       |
| ----------------- | ------ | -------------------------------------- | -------- | ------------ |
| android_key_path  | string | Android签名key文件路径，相对于app_root | 否       | "upload.jks" |
| android_key_alias | string | Android签名key别名                     | 否       | "upload"     |

### AUR

| 参数名称          | 类型   | 描述            | 是否必需 | 默认值    |
| ----------------- | ------ | --------------- | -------- | --------- |
| aur_package_name  | string | AUR包名称       | 否       | ""        |
| aur_key_algorithm | string | AUR SSH key算法 | 否       | "ed25519" |
| aur_version       | string | AUR包版本       | 是       |           |

## 密钥 Secrets

### turborepo

| 参数名称    | 类型   | 描述                    | 是否必需 | 默认值 |
| ----------- | ------ | ----------------------- | -------- | ------ |
| TURBO_TOKEN | string | 认证Turbo以启用远程缓存 | 否       |        |

### Tauri 自动更新签名

| 参数名称                           | 类型   | 描述                           | 是否必需 | 默认值 |
| ---------------------------------- | ------ | ------------------------------ | -------- | ------ |
| TAURI_SIGNING_PRIVATE_KEY          | string | 签名应用二进制文件以支持更新器 | 否       |        |
| TAURI_SIGNING_PRIVATE_KEY_PASSWORD | string | 签名密钥的密码                 | 否       |        |

### Android 签名

| 参数名称                  | 类型   | 描述                               | 是否必需 | 默认值 |
| ------------------------- | ------ | ---------------------------------- | -------- | ------ |
| ANDROID_KEYSTORE          | string | 用于APK签名的`jks`文件的Base64编码 | 否       |        |
| ANDROID_KEYSTORE_PASSWORD | string | 密钥库的密码                       | 否       |        |

### AUR

| 参数名称            | 类型   | 描述                 | 是否必需 | 默认值 |
| ------------------- | ------ | -------------------- | -------- | ------ |
| AUR_SSH_PRIVATE_KEY | string | 用于AUR发布的SSH私钥 | 否       |        |

### 自动生成Changelog

| 参数名称       | 类型   | 描述                            | 是否必需 | 默认值 |
| -------------- | ------ | ------------------------------- | -------- | ------ |
| GEMINI_API_KEY | string | 认证Google Gemini以生成变更日志 | 否       |        |

### 构建时的环境变量

| 参数名称  | 类型   | 描述                          | 是否必需 | 默认值 |
| --------- | ------ | ----------------------------- | -------- | ------ |
| BUILD_ENV | string | 传递给`tauri build`的环境变量 | 否       |        |

`BUILD_ENV` 格式：

```sh
ENV_VAR1=value1
ENV_VAR2=value2
...
```

## 运行步骤

### 创建 Release

- 安装 Node.js 和 `node-fetch`，运行 [`generate-changelog.mjs`](https://github.com/LiRenTech/project-graph/blob/master/.github/scripts/generate-changelog.mjs) 脚本，使用 Gemini API 生成变更日志
- 如果参数 `delete_release` 为 `true`，则会删除 tag 相同的 Release
- 根据参数 `release_name`, `release_tag`, `prerelease` 和刚才生成的变更日志创建一个 Release

### 构建前端

这一步是为了把前端的 dist 上传到 turborepo 的 Remote Cache 缓存，然后在后续的构建中直接从缓存中拉取，加快构建速度

这也是为什么我们使用 turborepo 而不是 yamuko 等其他 monorepo 管理工具的原因之一

### 构建 Tauri 应用

这是整个工作流的核心，首先使用 matrix 矩阵创建多个构建任务：

| 构建平台 `platform`\* | [应用变体](../variant) `variant` | 产物路径 Glob `dist`\*                                                       | 额外的 Rust 平台 `rust_targets` | 是否为 Android 版本 `android` |
| --------------------- | -------------------------------- | ---------------------------------------------------------------------------- | ------------------------------- | ----------------------------- |
| ubuntu-22.04          |                                  | `src-tauri/target/release/bundle/**/*.{deb,AppImage,rpm,sig}`                |                                 |                               |
| ubuntu-22.04          | foss                             | `src-tauri/target/release/bundle/**/*.{deb,AppImage,rpm,sig}`                |                                 |                               |
| windows-latest        |                                  | `src-tauri/target/release/bundle/nsis`                                       |                                 |                               |
| windows-latest        | foss                             | `src-tauri/target/release/bundle/nsis`                                       |                                 |                               |
| windows-latest        | win7                             | `src-tauri/target/release/bundle/nsis`                                       |                                 |                               |
| macos-latest          |                                  | `src-tauri/target/aarch64-apple-darwin/release/bundle/**/*.{dmg,tar.gz,sig}` | aarch64-apple-darwin            |                               |
| macos-latest          | foss                             | `src-tauri/target/aarch64-apple-darwin/release/bundle/**/*.{dmg,tar.gz,sig}` | aarch64-apple-darwin            |                               |
| macos-latest          |                                  | `src-tauri/target/x86_64-apple-darwin/release/bundle/**/*.{dmg,tar.gz,sig}`  | x86_64-apple-darwin             |                               |
| macos-latest          | foss                             | `src-tauri/target/x86_64-apple-darwin/release/bundle/**/*.{dmg,tar.gz,sig}`  | x86_64-apple-darwin             |                               |

运行流程：

- 如果是 Android 版本，则会先配置开发环境，然后生成签名配置文件 `keystore.properties`，设置版本号
- 设置应用的版本号 `app_version`
- 按照 `variant` 修改相关配置，比如修改 `tauri.conf.json` 的 `downloadBootstrapper` 为 `embedBootstrapper`
- 运行 `tauri build` 命令，构建应用
- 重命名产物文件，比如把 `*.AppImage` 改为 `Project Graph_0.0.0_x64.AppImage`
- 上传产物文件到 Release
- 如果是 Linux 版本，还要计算 sha256sum，保存到 output

### 修改 AUR 包

这一步很简单，就是把 AUR 包克隆下来改一下版本和 sha256sum，然后提交 push
